package com.escom.dao;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;

import com.escom.entidad.PacienteVO;
import com.escom.utils.Constantes;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by Carlos on 04/04/2014.
 */
public class PacienteDAO {

    private Context context;
    private String idMedico;

    public PacienteDAO(Context context) {
        this.context = context;
    }

    public void createPacientes(PacienteVO[] pacientes) {
        Log.d("Logger PacienteDAO", "createPacientes");
        DataBaseManager dataBaseManager = new DataBaseManager(this.context);
        SQLiteDatabase sqLiteDatabase = dataBaseManager.getWritableDatabase();
        if (sqLiteDatabase != null) {
            for (int i = 0; i < pacientes.length; i++) {
                PacienteVO paciente = pacientes[i];
                //Log.d("Logger PacienteDAO {}", paciente.toString());

                ContentValues contentValues = new ContentValues();
                try {
                    contentValues.put(DataBaseManager.ID_PERSONA, paciente.getIdPersona());
                    contentValues.put(DataBaseManager.NOMBRE, paciente.getNombre());
                    contentValues.put(DataBaseManager.APELLIDO_PATERNO, paciente.getApPaterno());
                    contentValues.put(DataBaseManager.APELLIDO_MATERNO, paciente.getApMaterno());
                    contentValues.put(DataBaseManager.TELEFONO, paciente.getTelefono());
                    contentValues.put(DataBaseManager.CELULAR, paciente.getCelular());
                    contentValues.put(DataBaseManager.EMAIL, paciente.getEmail());
                    contentValues.put(DataBaseManager.GENERO, String.valueOf(paciente.getGenero()));
                    contentValues.put(DataBaseManager.COLONIA, paciente.getColonia());
                    contentValues.put(DataBaseManager.CIUDAD, paciente.getCiudad());
                    contentValues.put(DataBaseManager.ESTADO, paciente.getEstado());
                    contentValues.put(DataBaseManager.CP, paciente.getCodigoPostal());
                    sqLiteDatabase.insertOrThrow(DataBaseManager.HLC_PERSONA_TAB, null, contentValues);
                } catch (android.database.sqlite.SQLiteConstraintException exSQL) {
                    Log.d(Constantes.LOG_ID, this.getClass().getName() + " Error administrado");
                    sqLiteDatabase.update(DataBaseManager.HLC_PERSONA_TAB, contentValues,
                            DataBaseManager.ID_PERSONA + " = " + paciente.getIdPersona(), null);
                }

                contentValues = new ContentValues();
                try {
                    contentValues.put(DataBaseManager.ID_PACIENTE, paciente.getIdPaciente());
                    contentValues.put(DataBaseManager.ID_PERSONA, paciente.getIdPersona());
                    contentValues.put(DataBaseManager.CURP, paciente.getCurp());
                    contentValues.put(DataBaseManager.FECHA_NACIMIENTO, paciente.getFechaNacimiento());
                    contentValues.put(DataBaseManager.LUGAR_NACIMIENTO, paciente.getLugarNacimiento());
                    contentValues.put(DataBaseManager.NO_SS, paciente.getNoSeguroSocial());
                    contentValues.put(DataBaseManager.PESO, paciente.getPeso());
                    contentValues.put(DataBaseManager.ESTATURA, paciente.getEstatura());
                    contentValues.put(DataBaseManager.TIPO_SANGRE, paciente.getTipoSangre());
                    sqLiteDatabase.insertOrThrow(DataBaseManager.HLC_PACIENTE_TAB, null, contentValues);
                } catch (android.database.sqlite.SQLiteConstraintException exSQL) {
                    Log.d(Constantes.LOG_ID, this.getClass().getName() + " Error administrado");
                    sqLiteDatabase.update(DataBaseManager.HLC_PACIENTE_TAB, contentValues,
                            DataBaseManager.ID_PACIENTE + " = " + paciente.getIdPaciente(), null);
                }

                contentValues = new ContentValues();
                try {
                    contentValues.put(DataBaseManager.ID_PACIENTE_MEDICO, paciente.getIdPacienteMedico());
                    contentValues.put(DataBaseManager.ID_PACIENTE, paciente.getIdPaciente());
                    contentValues.put(DataBaseManager.ID_MEDICO, idMedico);
                    sqLiteDatabase.insertOrThrow(DataBaseManager.HLC_PACIENTE_MEDICO_TAB, null, contentValues);
                } catch (android.database.sqlite.SQLiteConstraintException exSQL) {
                    Log.d(Constantes.LOG_ID, this.getClass().getName() + " Error administrado");
                }
            }
            sqLiteDatabase.close();
        }
    }

    public List<PacienteVO> retrievePacientesByMedico(String idMedico) {
        Log.d(Constantes.LOG_ID, this.getClass().getName() + " PacienteDAO retrievePacientes");
        Log.d(Constantes.LOG_ID, this.getClass().getName() + " ID MEdico : " + idMedico);
        DataBaseManager dataBaseManager = new DataBaseManager(this.context);
        SQLiteDatabase sqLiteDatabase = dataBaseManager.getWritableDatabase();
        Cursor cursor = sqLiteDatabase.rawQuery("SELECT "
                + "pa.id_paciente,"
                + "pe.id_persona,"
                + "pa.curp,"
                + "pa.fecha_nacimiento,"
                + "pa.lugar_nacimiento,"
                + "pa.no_ss,"
                + "pa.peso,"
                + "pa.estatura,"
                + "pa.tipo_sangre,"
                + "pe.nombre,"
                + "pe.apellido_paterno,"
                + "pe.apellido_materno,"
                + "pe.telefono,"
                + "pe.celular,"
                + "pe.email,"
                + "pe.genero,"
                + "pe.colonia,"
                + "pe.ciudad,"
                + "pe.estado,"
                + "pe.cp "
                + "FROM "
                + "hlc_persona_tab pe, hlc_paciente_tab pa, hlc_paciente_medico_tab pm "
                + "WHERE pe.id_persona = pa.id_persona "
                + "AND pa.id_paciente = pm.id_paciente "
                + "AND pm.id_medico = " + idMedico, null);


        List<PacienteVO> pacientes = new ArrayList<PacienteVO>();
        if (cursor.moveToFirst()) {
            do {
                PacienteVO paciente = new PacienteVO();
                paciente.setIdPaciente(String.valueOf(cursor.getInt(0)));
                paciente.setIdPersona(String.valueOf(cursor.getInt(1)));
                paciente.setCurp(cursor.getString(2));
                paciente.setFechaNacimiento(cursor.getString(3));
                paciente.setLugarNacimiento(cursor.getString(4));
                paciente.setNoSeguroSocial(cursor.getString(5));
                paciente.setPeso(cursor.getString(6));
                paciente.setEstatura(cursor.getString(7));
                paciente.setTipoSangre(cursor.getString(8));
                paciente.setNombre(cursor.getString(9));
                paciente.setApPaterno(cursor.getString(10));
                paciente.setApMaterno(cursor.getString(11));
                paciente.setTelefono(cursor.getString(12));
                paciente.setCelular(cursor.getString(13));
                paciente.setEmail(cursor.getString(14));
                paciente.setGenero(cursor.getString(15).charAt(0));
                paciente.setColonia(cursor.getString(16));
                paciente.setEstado(cursor.getString(17));
                paciente.setCodigoPostal(cursor.getString(18));
                //Log.d("Logger PacienteDAO", paciente.toString());
                pacientes.add(paciente);
            } while (cursor.moveToNext());
        } else {
            Log.d("Logger PacienteDAO", "NULO");
        }
        sqLiteDatabase.close();
        return pacientes;
    }

    public PacienteVO retrievePaciente(String idPaciente) {
        Log.d("Logger PacienteDAO", "retrievePacientes");
        DataBaseManager dataBaseManager = new DataBaseManager(this.context);
        SQLiteDatabase sqLiteDatabase = dataBaseManager.getWritableDatabase();
        Cursor cursor = sqLiteDatabase.rawQuery("SELECT "
                + "pa.id_paciente,"
                + "pe.id_persona,"
                + "pa.curp,"
                + "pa.fecha_nacimiento,"
                + "pa.lugar_nacimiento,"
                + "pa.no_ss,"
                + "pa.peso,"
                + "pa.estatura,"
                + "pa.tipo_sangre,"
                + "pe.nombre,"
                + "pe.apellido_paterno,"
                + "pe.apellido_materno,"
                + "pe.telefono,"
                + "pe.celular,"
                + "pe.email,"
                + "pe.genero,"
                + "pe.colonia,"
                + "pe.ciudad,"
                + "pe.estado,"
                + "pe.cp "
                + "FROM "
                + "hlc_persona_tab pe, hlc_paciente_tab pa "
                + "WHERE pe.id_persona = pa.id_persona "
                + "AND pa.id_paciente = ?", new String[]{idPaciente});

        PacienteVO paciente = null;
        if (cursor.moveToFirst()) {
            do {
                paciente = new PacienteVO();
                paciente.setIdPaciente(String.valueOf(cursor.getInt(0)));
                paciente.setIdPersona(String.valueOf(cursor.getInt(1)));
                paciente.setCurp(cursor.getString(2));
                paciente.setFechaNacimiento(cursor.getString(3));
                paciente.setLugarNacimiento(cursor.getString(4));
                paciente.setNoSeguroSocial(cursor.getString(5));
                paciente.setPeso(cursor.getString(6));
                paciente.setEstatura(cursor.getString(7));
                paciente.setTipoSangre(cursor.getString(8));
                paciente.setNombre(cursor.getString(9));
                paciente.setApPaterno(cursor.getString(10));
                paciente.setApMaterno(cursor.getString(11));
                paciente.setTelefono(cursor.getString(12));
                paciente.setCelular(cursor.getString(13));
                paciente.setEmail(cursor.getString(14));
                paciente.setGenero(cursor.getString(15).charAt(0));
                paciente.setColonia(cursor.getString(16));
                paciente.setEstado(cursor.getString(17));
                paciente.setCodigoPostal(cursor.getString(18));
                //Log.d("Logger PacienteDAO", paciente.toString());
            } while (cursor.moveToNext());
        } else {
            Log.d(Constantes.LOG_ID, this.getClass().getName() + " Consulta vacia");
        }
        if (paciente == null) {
            paciente = new PacienteVO();
        }
        sqLiteDatabase.close();
        return paciente;
    }

    public void setIdMedico(String idMedico) {
        this.idMedico = idMedico;
    }
}
